=== 系统概述 ===

25T PIS系统主要用于国内型车。其主要功能就是根据收集地理信息进行全自动语音报站，Led显示屏显示到站字幕。整套报站系统硬件组成：报站控制器（含键盘、显示屏）、Gps信息采集器、温度采集器、Led显示屏（7字和8字）、顺号调节器。软件组成：主控制模块、温湿度采集模块、卫星定位模块、Led显示模块、语音模块。

=== 软件模块详情 ===
==== 主控制模块 ====

主控制模块采用 Rails3 + Redis + Mysql +Juggernaut 开发技术，其主要功能包括前台数据展示、交互，后台数据准备、参数设置、系统设置等。

# 前台展示页面共包括如下几部分：
##报站：展示当前运行路线，当前站。可切换报站模式和音量等。
##字幕页面：显示预设公共提示字幕或者语音广播，通过字幕或者广播字幕后面对应数字按键触发发送到Led显示屏和语音播报。
##实景地图：在地图（OpenStreeMap）上定位当前位置,可通过按钮'8','9'放大缩小地图，本系统放大最大等级为11.
##虚拟地图：根据当前路线所有站坐标等比例生成路线，当前点会闪烁显示。
##参数、交路：主要实时设置一些常用属性
###校正坐标：用采集的坐标信息替换原有的坐标信息
###校正温度：调节温度修正值，显示温度 = 采集温度 + 校正值 。校正值取值范围 (-9.9 到 +9.9)
###交路设置：此也没会列车所有交路信息，可通过按钮选择切换当前运行交路

# 后台管理包括如下几部分：
##数据管理：即数据导入导出，把最好的数据包制作完毕后，可在此导入系统（支持.tar.gz,.zip格式）
##参数设置：可实时更新系统预报里程，预报里程，上下行切换时间，语音播放次数等
##系统状态：
###系统状态：列出系统所有Daemon服务状态，可手动操作（重启、停止、启动）
###系统版本：列出当前系统制作时间，所属分支，git-sha有利于区分系统
###查看Gpsd实时数据：实时在线显示Gpsd信息，有利于调试Gps报站服务
###重启系统：重新重启机器系统

=== 表结构 ===
# current_tickers: 当前显示的字幕内容
## position: 标记字幕类型
## ticker_id: 对应的字幕记录ID
## name: 字幕内容
# device_states: 设备列表（南京试验平台使用）
## device_ip: 设备IP
## device_name: 设备名称
## device_desc: 设备备注
## device_account: 设备账户
## last_onlined_at: 最后在线时间
## point_x: 在图片上对应的X轴坐标
## point_y: 在图片上对应的Y轴坐标
## path_point: 设备联线做经过的几个转折点
## path_color: 设备连线颜色
## path_width: 设备连线宽度
## point_height: 描述设备图片高度
## point_width:  描述设备图片宽度
## device_type:  描述设备类型
## device_parent_id: 父设备记录ID(用于标记功放下的喇叭)
## device_online_image: 设备在线忙碌图片
## device_offline_image: 设备离线忙碌图片
## device_busy_image: 设备忙碌状态图片
# routes: 当前运行路线车次表
## name: 车次名称
## reverse_dots: （没有用到）
## running: 是否当前运行
## current_rtst_id 当前停靠站点对应信息
## current_rtst_status 当前停靠站状态(有三个状态分别为 预到站、到站、离站，其值分别为0,1,2)
## position: 排列顺序
# rtsts: 当前运行路线站详细表
## station_id: 对应站坐标记录ID
## route_id: 对应路线记录ID
## position: 站序
## rtst_remark: 站备注
## ticker_in_id: 预到站对应字幕记录ID
## ticker_at_id: 进站对应字幕记录ID
## ticker_out_id: 离站对应字幕记录ID
## at_longitude: 站坐标（经度）
## at_latitude: 站坐标（纬度）
## zh_voice_pack_in_id: 预到站中文语音记录ID
## en_voice_pack_in_id: 预到站英文语音记录ID
## zh_voice_pack_at_id: 到站中文语音记录ID
## en_voice_pack_at_id: 到站英文语音记录ID
## zh_voice_pack_out_id: 离站中文语音记录ID
## en_voice_pack_out_id: 离站英文语音记录ID
## reached_at: 进站时间
## leave_at 离站时间
# settings: 系统配置表
## var==juggernaut_address: juggernaut地址
## var==juggernaut_port: juggernaut端口
## var==i18n: 当前语言
## var==canvas_height: 示意地图高
## var==canvas_width: 示意地图宽
## var==box_length: 示意地图边框
## var==right_box_length: 示意地图右边框
## var==volume: 当前音量
## var==volume_max: 语音最大音量
## var==volume_step: 语音跨度值
## var==route_waite_time: 路线切换等待时间
## var==forecast_pa_mile: 预报站里程
## var==arrived_range_mile: 到站里程
## var==model_status: 报站模式
## var==crash_message: GPS、Led出错显示文字
## var==temp_adjust: 温度调节值
## var==voice_times: 语音报站次数
## var==default_play_times: 语音默认播放次数（南京实验室）
## var==default_keep_time:  字幕默认显示时长（南京实验室）
# station: 站点信息表
## name: 站名
## longitude: 站点坐标-经度
## latitude :站点坐标-纬度
## geox,geoy(遗留，现在没有用到)
# station_translations: 站名国际化表
## station_id: 对应站记录ID
## locale: 语言类型
## name: 站名翻译
# tickers: 公共字幕表
## name: 字幕内容
## category: 字幕类型（public_info为提示字幕、led报站字幕）
## settable: 当前没有用到
# train_line_times 所有路线表
## station_index: 站序
## train_no: 车次名称
## arrival_time: 到达时间
## leave_time: 离站时间
## run_time: 区间运行时间
## run_kilometer: 区间运行公里
## check_result: 检查状态（设置为3即可）
## 其他的参照rtsts表
# voice_packs 语音文件表
## remark: 语音对应的信息
## settable: 语音类型（1为紧急语音，0为报站语音）
## voicefile_file_name: 语音文件名称
## voicefile_content_type: 语音文件类型
## voicefile_file_size: 语音文件大小
# route_lists、gps、sensor_records、sensors 是历史遗留表，已被删除（可能部分机器还有）

==== Gps采集报站模块 ====
模块所在目录：/ntdeck/lib/gps/
工作原理说明：机器通过串口ttyS1连接到Gps信息采集器。首先通过Gpsd守护进程把采集到gps数据转发到2947端口，然后gps_redis_daemon 守护进程通过连接到串口，读取数据，并把数据存储到Redis,最后Ntgps守护进程把数据从Redis取出来处理，并与预设的数据比对，如果达到预设的条件，通过调用主程序接口，实现自动报站。

<b>Ntgps守护进程详细：</b>
*文件名： /ntdeck/lib/gps/ntgps.rb
*启动命令：ruby ntgps.rb -e produciton 
*详细说明：首先Ntgps 守护进程会加载主程序环境（可直接调用主程序参数及方法）和gps_processor（获取Gps里中的纬度、经度、时间等信息） ，连接Redis取出数据，如果数据不对，则发送给主程序GPS错误，否则处理数据，获得具体经纬度、速度、距前方站距离并发送给主程序。然后计算与前方站距离，当距离进入预设阀值且当前状态匹配，则开始调用主程序接口进行报站
==== Led守护进程 ====
模块所在目录：/ntdeck/lib/led/
功能说明：系统在报站或者发送其他提示字幕时，要第一时间显示在Led屏上。显示时长没有固定，Led在空闲时候，需要自动显示一些提示字幕、速度、温度、当前时间、前方站等信息，具体怎样一个显示方式和显示模式都没有固定。然后再把这些数据按协议处理，把得到的数据通过串口发送出去。具体协议见[[https://git.g77k.com/huxl/ntdeck_docs/blob/master/%E6%98%BE%E7%A4%BA%E5%B1%8F%E9%80%9A%E8%AE%AF%E5%8D%8F%E8%AE%AEV2.01.pdf Led通讯协议]]

==== TEMP 守护进程 ====
模块所在目录：/ntdeck/lib/temp_reader/
功能说明：PIS主机连接通过串口连接了温度采集器，TEMP 守护进程可实时去获取数据（需要按照一定规则加工，得到真正的温度信息），如果温度在合理范围内则发送给主程序同时也存到Redis(供Led模块显示)